/**
 * 块语句
 * 最基本的语句是用于组合语句的块语句 块由一对花括号界定
 * 示例：
 * {
 *   statement1;
 *   statement2;
 *   // …
 *   statementN;
 * }
 */

/**
 * 块语句通常用于控制流语句（if、else、for、while、switch、try、catch、finally）
 * while (x < 10) {
 *   x++;
 * }
 * 这里 { x++; } 就是块语句
 */

/**
 * 条件语句
 * if...else if...else 语句
 * 条件语句是一组会在指定的条件为真时执行的指令
 * JavaScript 支持两种条件语句：if...else 和 switch
 * 使用 if 语句在逻辑条件为 true 时执行语句 使用可选的 else 子句在条件为 false 时执行语句
 * 示例：
 * if (condition) {
 *   statement1;
 * } else {
 *   statement2;
 * }
 *
 * condition 可以是任何能求值为 true 或 false 的表达式
 */

/**假值
 * 下面这些值求值为 false（也叫做假值）：
 * false
 * undefined
 * null
 * 0
 * NaN 不是一个数字 Not a Number
 * 空字符串（""）
 *
 * 所有其他的值——包括所有的对象——在被传递给条件语句时会求值为 true
 */

/**
 * switch 语句
 * switch 语句允许程序求一个表达式的值并且尝试将表达式的值和 case 标签进行匹配
 * 如果匹配成功 程序会执行相关的语句
 * 示例：
 * 写法1
 * switch (expression) {
 *   case label1:
 *     statements1;
 *     break;
 *   case label2:
 *     statements2;
 *     break;
 *   // …
 *   default:
 *     statementsDefault;
 * }
 * 写法2
 * switch (label) {
 *   case expression1:
 *     statements1;
 *     break;
 *   case expression2:
 *     statements2;
 *     break;
 *   // …
 *   default:
 *     statementsDefault;
 * }
 * 写法2示例
 * switch (true) {
 *   case source >= 90:
 *     statements1;
 *     break;
 *   case source >= 80:
 *     statements2;
 *     break;
 *   // …
 *   default:
 *     statementsDefault;
 * }
 */

/**
 * break 语句
 * 每个 case 子句会关联一个可选的 break 语句
 * 它能保证在匹配的语句被执行后程序可以跳出 switch 并且继续执行 switch 后面的语句
 * 如果 break 被忽略 程序会在 switch 语句内继续执行（将会执行下一个 case 的语句 依此类推）
 * 问：break用在什么地方？
 * 答：
 * 1. for循环 代码块
 * 2. switch case 代码块
 */

//* 异常处理语句

/**
 * 你可以用 throw 语句抛出一个异常并且用 try...catch 语句处理它
 * 示例：//抛出不同类的异常
 * throw expression;
 * throw "错误 2"; // 字符串类型
 * throw 42; // 数字类型
 * throw true; // 布尔类型
 * throw new Error(‘异常原因’); // Error 类
 * throw {
 *   toString() {
 *     return "我是一个对象";
 *   },
 * };
 */

/**
 * try...catch 语句
 * try...catch 语句用于标记一段要尝试的语句块并指定抛出异常时的一个或多个响应
 * 如果抛出了异常 try...catch 语句会捕获它
 * 示例：
 * function getMonthName(mo) {
 *   mo--; // 将月份调整为数组索引（这样的话，0 = 一月，11 = 十二月）
 *   const months = [
 *     "一月", "二月", "三月", "四月", "五月", "六月",
 *     "七月", "八月", "九月", "十月", "十一月", "十二月",
 *   ];
 *   if (months[mo]) {
 *     return months[mo];
 *   } else {
 *     throw new Error("无效的月份数值"); // 在这使用 throw 关键字
 *   }
 * }
 *
 * try {
 *   // 要尝试的语句
 *   monthName = getMonthName(myMonth); // 可能抛出异常的函数
 * } catch (e) {
 *   monthName = "未知";
 *   logMyErrors(e); // 将异常对象传递给错误处理器（例如，你写的函数）
 * }
 */

/**
 * catch 块
 * 可以使用 catch 块来处理所有可能在 try 块中产生的异常
 * 示例：
 * catch (exception) {
 *   statements
 * }
 */

for (let itemIndex = 10; itemIndex < 100; itemIndex += 10) {
}

// itemIndex 初始是 -10
// 当 itemIndex <= -100
// 每次变化10
for (let itemIndex = -10; itemIndex <= -100; itemIndex -= 10){

}
